home *** CD-ROM | disk | FTP | other *** search
/ Floppyshop 2 / Floppyshop - 2.zip / Floppyshop - 2.iso / diskmags / 0022-3.564 / dmg-3419 / pack_snt.205 / dat_depa.s next >
Text File  |  1991-04-25  |  4KB  |  199 lines

  1. *
  2. * Depack routine voor data
  3. ***************************************
  4. * Sentry Packer v2.01 Data Decruncher *
  5. * Coded by Eagle. (20 Jan 1992)       *
  6. * Source a0, d0: length packed data   *
  7. * OUT: D0=depacked length          *
  8. ***************************************
  9.  
  10.     lea     data(pc),a0    ; source
  11.     lea     buf(pc),a1    ; dest
  12.     move.l    #buf-data,d0    ; lengte packed data
  13.     bsr    sentry2
  14.  
  15. sentry2    lea    (a1),a3
  16.     lea    (a0,d0.l),a0
  17.     tst.b    -1(a0)
  18.     bne.s    .cont1
  19.     subq.l    #1,a0
  20. .cont1    moveq    #8,d6
  21.     bsr    get_long1
  22.     cmpi.l    #'2tnS',d0    ; Snt2
  23.     beq.s    .unpack
  24.     rts
  25. .unpack    bsr    get_long1
  26.     lea    (a3,d0.l),a2    ; dest adres
  27.     move.l    d0,-(sp)
  28.     move.l    a2,a5        ; save for picture depack
  29.     bsr    get_long1
  30.     moveq    #0,d1
  31.     bsr    .getbyte
  32.     move.w    d2,unp_pic
  33.     moveq    #0,d1
  34.     bsr    .getbyte
  35.     move.w    d2,unp_sam
  36.     bne.s    .no_sam
  37.     move.l    d0,-(sp)
  38.     bsr    get_long1
  39.     move.l    d0,samoff1+4
  40.     bsr    get_long1
  41.     move.l    d0,samoff1
  42.     move.l    (sp)+,d0
  43. .no_sam    bsr.s    .unp_loop    ; unpack data
  44.     tst    unp_pic
  45.     bne.s    .no_pic
  46.     bsr    unp_picture
  47. .no_pic    tst    unp_sam
  48.     bne.s    .no_mod
  49.     bsr    samples
  50. .no_mod    move.l    (sp)+,d0
  51.     rts
  52.  
  53. .unp_loop
  54.     bsr.s    .getbit
  55. .cont    bcs.s   .blocks
  56.     bsr.s    .getbit
  57.     bcs.s    .copy_2
  58.     move.b    -(a0),-(a2)    ; 1 byte copy
  59.     bra    .l_col
  60. .copy_2    bsr.s    .getbit
  61.     bcs.s    .c_more
  62.     moveq    #1,d2        ; copy 2 bytes
  63.     bra.s    .copy
  64. .c_more    lea    copy_tab1(pc),a4
  65. .c_loop    move.l    (a4)+,d1
  66.     bsr.s    .getbyte        ; haal aantal
  67.     subq.w    #1,d2
  68.     bpl.s    .found
  69.     bra.s    .c_loop
  70. .found    swap    d1
  71.     add.w    d1,d2
  72.  
  73. .copy    move.b    -(a0),-(a2)
  74.     dbf    d2,.copy
  75.     bra    .l_col
  76.  
  77. .get_off
  78.     MOVEQ    #1,D1        ;OFFSET
  79.     BSR.S    .getbyte
  80.     move.b    (a4,d2),d1    ; bits
  81.     ADD.W    D2,D2
  82.     ext.w    d1
  83.     move.w    4(a4,d2),d4
  84.     bsr.s    .getbyte
  85.     add.w    d4,d2
  86.     rts
  87. .getbit    add.l    d0,d0    ;LSR.L    #1,D0
  88.     beq.s    .haha
  89.     rts
  90. .haha    bsr.s    get_long1
  91.     addx.l    d0,d0    ;ROXR.L  #1,D0
  92.     rts
  93. .haha1    bsr.s    get_long1
  94.     addx.l    d0,d0    ;ROXR.L  #1,D0
  95.     bra.s    .getbyt
  96. .getbyte
  97.     CLR.W   D2
  98. .loop    add.l    d0,d0    ;LSR.L    #1,D0
  99.     beq.s    .haha1
  100. .getbyt    addx.L  d2,D2 
  101.     DBF     D1,.loop
  102.     RTS
  103.  
  104. .blocks    bsr.s    .getbit
  105.     bcs.s    .string3
  106.     moveq    #1,d3        ; 2 bytes-string
  107.     moveq    #8-1,d1    ; small-bits-offset
  108.     bra.s    .string_copy
  109. .string3
  110.     lea    small_offset1(pc),a4
  111.     bsr.s    .getbit
  112.     bcs.s    .string_more
  113.     moveq    #2,d3        ; 3 bytes-string
  114.     bra.s    .do_strings
  115. .string_more
  116.     moveq    #1,d1        ; 2 bits-commando
  117.     bsr.s    .getbyte
  118.     subq.w    #1,d2        ; large string?
  119.     bmi.s    .large
  120.     moveq    #3,d3        ; minimaal 4 bytes-string
  121.     add.w    d2,d3        ; meer?
  122.     bra.s    .do_strings
  123. .large    lea    aantal_tab1(pc),a4
  124.     bsr.s    .get_off
  125.     move.w    d2,d3
  126.     lea    offset_tab1(pc),a4
  127. .do_strings
  128.     bsr.s    .get_off
  129.     bra.s    .s_copy
  130. .string_copy
  131.     bsr.s    .getbyte
  132. .s_copy    move.b    -1(a2,d2.w),-(a2) 
  133.     dbf    d3,.s_copy
  134.  
  135. .l_col    cmpa.l    a2,a3 
  136.     blt    .unp_loop
  137.     RTS
  138. get_long1
  139.     move.b    -(a0),d0
  140.     lsl.l    d6,d0
  141.     move.b    -(a0),d0
  142.     lsl.l    d6,d0
  143.     move.b    -(a0),d0
  144.     lsl.l    d6,d0
  145.     move.b    -(a0),d0
  146.     move.w    #$10,ccr
  147.     rts
  148. samples    lea    samoff1(pc),a1
  149.     move.l    a3,a0        ; source adres
  150.     add.l    (a1)+,a0
  151.     move.l    (a1),d0
  152.     lea    (a0,d0.l),a2
  153. .loop    move.b    (a0)+,d0
  154.     sub.b    d0,(a0)
  155.     neg.b    (a0)
  156.     cmp.l    a2,a0
  157.     blt.s    .loop
  158.     rts
  159. unp_picture
  160. .low    move.w    #$0f9f,d7
  161. snt2_01    moveq    #3,d6
  162. snt2_02    move.w    -(a5),d4
  163.     moveq    #3,d5
  164. snt2_03    add.w    d4,d4
  165.     addx.w    d0,d0
  166.     add.w    d4,d4
  167.     addx.w    d1,d1
  168.     add.w    d4,d4
  169.     addx.w    d2,d2
  170.     add.w    d4,d4
  171.     addx.w    d3,d3
  172.     dbra    d5,snt2_03
  173.     dbra    d6,snt2_02
  174.     movem.w d0-d3,(a5)
  175.     dbra    d7,snt2_01
  176.     rts
  177. samoff1    dc.l    0,0
  178. unp_pic    dc.w    0
  179. unp_sam    dc.w    0
  180. offset_tab1
  181.     dc.b    5-1,8-1,9-1,13-1
  182.     dc.w    1,1+32,1+32+256,1+32+256+512
  183. aantal_tab1
  184.     dc.b    2-1,3-1,5-1,9-1
  185.     dc.w    6,6+4,6+4+8,6+4+8+32
  186. small_offset1
  187.     dc.b    4-1,5-1,7-1,9-1
  188.     dc.w    1,1+16,1+16+32,1+16+32+128
  189. copy_tab1
  190.     dc.w    2,1
  191.     dc.w    5,2
  192.     dc.w    12,3
  193.     dc.w    27,4
  194.  
  195. data    incbin    blb_*.s
  196.  
  197. buf    ds.l    10000
  198.